package com.goat.model.manager;

import com.goat.model.element.BaseElement;
import com.goat.model.manager.enumCls.GameElement;

import java.util.*;

/**
 * @说明 本类是元素管理器
 * 1.专门存储所有元素
 * 2.同时提供方法，給视图和控制获取数据
 *
 * 问题一：用map存放所有的《元素集合》
 * 问题二：单例模式
 */
public class EleManager {
    //元素管理器    enemy->enemyList
    //使用枚举类型做类的区分,到时候可以用枚举类型获取元素集合
    //                           界面层调用基类的showElement()，根据多态就会产生不同的效果
    private Map<GameElement, List<BaseElement>> gameElements;
    public Map<GameElement, List<BaseElement>> getGameElements() {
        return gameElements;
    }
    //本来想着有上面的getGameElements()就够了
    // ，但是还是要在本类中增加对List<BaseElement>的操作，为了方便《Loader》调用



    //单例模式：饿汉、饱汉(要加锁)

    //不允许外界构造
    private EleManager(){
        init();
    }
    //静态化的本例实体
    private static EleManager eleManager;
    //饿汉：类加载时就实例化类，使用静态代码块
    static {
        eleManager=new EleManager();
    }
    //静态方法返回实例
    public static EleManager getEleManager() {
        return eleManager;
    }

    //初始化方法
    public void init(){
        gameElements=new HashMap<GameElement,List<BaseElement>>();
        for (GameElement gameElement :GameElement.values()) {
            gameElements.put(gameElement,new ArrayList<BaseElement>());
        }

    }
}
